<template>
  <div ref="popup" class="ol-popup">
    <a href="#" id="popup-closer" class="ol-popup-closer" @click.stop="close"></a>
    <div id="popup-content">
      <slot />
    </div>
  </div>
</template>

<script>
import Overlay from "ol/Overlay.js";
import { fromLonLat } from 'ol/proj'

export default {
  name: "popup_index",
  data() {
    return {
    }
  },
  mounted() {
    let container = this.$refs.popup;
    if (container) {
      this.overlay = new Overlay({
        id: "popup",
        element: container,
        autoPan: {
          animation: {
            duration: 250
          }
        }
      });
      this._init();
    }
  },
  methods: {
    init(map) {
      this.map = map;
      this._init();
    },
    _init() {
      if (!this.map || !this.overlay) {
        return;
      }
      this.map.getOverlays().push(this.overlay);
    },
    open(lonLat) {
      this.overlay.setPosition(fromLonLat(lonLat));
    },
    close() {
      this.overlay.setPosition(undefined);
    }
  }
}
</script>

<style scoped>
.ol-popup {
  position: absolute;
  background-color: white;
  box-shadow: 0 1px 4px rgba(0,0,0,0.2);
  padding: 15px;
  border-radius: 10px;
  border: 1px solid #cccccc;
  bottom: 12px;
  left: -50px;
  min-width: 280px;
  z-index: 99999999999;
}
.ol-popup:after,
.ol-popup:before {
  top: 100%;
  border: solid transparent;
  content: " ";
  height: 0;
  width: 0;
  position: absolute;
  pointer-events: none;
}
.ol-popup:after {
  border-top-color: white;
  border-width: 10px;
  left: 48px;
  margin-left: -10px;
}
.ol-popup:before {
  border-top-color: #cccccc;
  border-width: 11px;
  left: 48px;
  margin-left: -11px;
}
.ol-popup-closer {
  text-decoration: none;
  position: absolute;
  top: 2px;
  right: 8px;
}
.ol-popup-closer:after {
  content: "✖";
}
</style>
